<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>实验二：BinaryBomb实验</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            display: flex;
            flex-direction: column;
            height: 100vh;
        }
        .navbar {
            display: flex;
            justify-content: space-between;
            align-items: center;
            background-color: #007BFF;
            color: white;
            padding: 10px 20px;
        }
        .navbar img {
            height: 40px;
        }
        .navbar .user-info {
            display: flex;
            align-items: center;
        }
        .navbar .user-info span {
            margin-right: 10px;
        }
        .navbar .user-info button {
            background-color: #0056b3;
            color: white;
            border: none;
            padding: 5px 10px;
            cursor: pointer;
        }
        .container {
            display: flex;
            flex: 1;
        }
        .sidebar {
            width: 200px;
            background-color: #f8f9fa;
            padding: 20px;
            box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
        }
        .sidebar ul {
            list-style: none;
            padding: 0;
        }
        .sidebar ul li {
            margin: 15px 0;
        }
        .sidebar ul li a {
            text-decoration: none;
            color: #333;
        }
        .main-content {
            flex: 1;
            padding: 20px;
            background-color: #fff;
        }
        h1, h2, h3 {
            color: #007BFF;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
        }
        table th, table td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: center;
        }
        table th {
            background-color: #007BFF;
            color: white;
        }
        table tr:nth-child(even) {
            background-color: #f9f9f9;
        }
        .mark {
            color: red;
            font-weight: bold;
        }
        .image {
            max-width: 100%;
            height: auto;
            margin: 10px 0;
        }
    </style>
</head>
<body>
    <!-- 顶部导航栏 -->
    <div class="navbar">
        <img src="./img/logo.png" alt="LOGO">
        <div class="user-info">
            <span>张三</span>
            <button>退出登录</button>
        </div>
    </div>

    <!-- 页面容器 -->
    <div class="container">
        <!-- 侧边栏 -->
        <div class="sidebar">
            <ul>
                <li><a href="student.html">仪表盘</a></li>
                <li><a href="#">实验查看</a></li>
                <li><a href="#">作业提交</a></li>
                <li><a href="#">成绩查询</a></li>
                <li><a href="#">通知公告</a></li>
                <li><a href="#">帮助与反馈</a></li>
            </ul>
        </div>

        <!-- 主内容区 -->
        <div class="main-content">
            <h1>实验二：BinaryBomb实验</h1>

            <h2>一、实验目的</h2>
            <ol>
                <li>增强学生对于程序的机器级表示、汇编语言、调试器和逆向工程等方面原理与技能的掌握。</li>
                <li>掌握使用gdb调试器和objdump来反汇编炸弹的可执行文件，并单步跟踪调试每一阶段的机器代码，从中理解每一汇编语言代码的行为或作用，进而设法"推断"出拆除炸弹所需的目标字符串。</li>
                <li>需要拆除尽可能多的炸弹。</li>
            </ol>

            <h2>二、实验仪器设备/实验环境</h2>
            <ul>
                <li>Linux操作系统---32位debian</li>
                <li>gdb调试器和objdump反汇编指令</li>
                <li>笔记本</li>
            </ul>

            <h2>三、实验内容及步骤</h2>
            <p>一个"binary bombs"（二进制炸弹，下文将简称为炸弹）是一个Linux可执行C程序，包含了7个阶段（phase1~phase6和一个隐藏阶段）。炸弹运行的每个阶段要求学生输入一个特定的字符串，若的输入符合程序预期的输入，该阶段的炸弹就被"拆除"，否则炸弹"爆炸"并打印输出 "BOOM!!!"字样。实验的目标是拆除尽可能多的炸弹层次。</p>
            <p>每个炸弹阶段考察了机器级语言程序的一个不同方面，难度逐级递增：</p>
            <ul>
                <li>阶段1：字符串比较</li>
                <li>阶段2：for循环</li>
                <li>阶段3：switch分支</li>
                <li>阶段4：递归函数</li>
                <li>阶段5：数组元素按序访问</li>
                <li>阶段6：链表</li>
                <li>隐藏阶段：只有在阶段4的拆解字符串后再附加一特定字符串后才会出现（作为最后一个阶段）</li>
            </ul>
            <p>为了完成二进制炸弹拆除任务，需要使用gdb调试器和objdump来反汇编炸弹的可执行文件，并单步跟踪调试每一阶段的机器代码，从中理解每一汇编语言代码的行为或作用，进而设法"推断"出拆除炸弹所需的目标字符串。这可能需要在每一阶段的开始代码前和引爆炸弹的函数前设置断点，以便于调试。</p>
            <p class="mark">[完成实验后提交给老师时，将答案文本文件名指定为：与拿到的炸弹文件相同的文件名，后缀为.txt。如：学号为19210310301的同学，提交时将答案命名为：bomb19210310301.txt。由学委收齐后统一发给老师。]</p>

            <h2>四、实验注意事项</h2>
            <ol>
                <li>建议在linux下进行文本拆弹密码文本编辑。</li>
                <li>建议使用gdb或IDA、edb、DDD之类的调试软件辅助进行。</li>
                <li>建议实验过程中手绘图表辅助逆向工程分析。</li>
            </ol>
        </div>
    </div>
</body>
</html>